package com.carefree.system.modules.admin.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.carefree.common.valid.AddGroup;
import com.carefree.common.valid.UpdateGroup;
import lombok.Data;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.io.Serializable;
import java.util.Date;
import java.util.List;


/**
 * 菜单
 *
 * @author tengbin
 */
@Data
@TableName("sys_menu")
public class MenuEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 编号
     */
    @NotNull(message = "修改必须指定编号", groups = {UpdateGroup.class})
    @Null(message = "新增不能指定编号", groups = {AddGroup.class})
    @TableId
    private Long id;
    /**
     * 所属上级
     */
    private Long parentId;
    /**
     * 名称
     */
    private String name;

    /**
     * 父菜单名称
     */
    @TableField(exist = false)
    private String parentName;

    /**
     * 类型(0:目录,1:菜单,2:按钮)
     */
    private Integer type;
    /**
     * 路由地址
     */
    private String path;
    /**
     * 组件路径
     */
    private String component;
    /**
     * 权限标识
     */
    private String perms;
    /**
     * 图标
     */
    private String icon;
    /**
     * 排序
     */
    private Integer sortValue;
    /**
     * 状态(0:禁止,1:正常)
     */
    private Integer status;
    /**
     * 创建人
     */
    private Long creator;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 更新时间
     */
    private Date updateTime;
    /**
     * 修改人
     */
    private Long modifier;
    /**
     * 删除标记（0:可用 1:已删除）
     */
    @TableLogic(value = "0", delval = "1")
    private Integer isDeleted;

    /**
     * 子菜单
     */
    @TableField(exist = false)
    private List<MenuEntity> children;

    /**
     * 是否被选中(为角色分配菜单)
     */
    @TableField(exist = false)
    private boolean isSelect;
}
